
#pragma once

#include "iostream"
#include "vector"
#include "algorithm"

using namespace std;
/*HJJ QQ479287006
 *给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。

有效字符串需满足：

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。

来源：力扣（LeetCode）
链接：https://leetcode.cn/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

 阿里问的去掉条件2  我的想法  直接用hashMap记录三个括号分别的数量，然后右括号也计数，最后对比是否相同即可
 * */
bool isValid(string s) {

    stack<char> st;

    for(int i=0;i<s.size();i++){

        if(s[i]=='['){
            st.push(s[i]);

        }else if(s[i]=='{'){
            st.push(s[i]);
        }else if(s[i]=='('){
            st.push(s[i]);
        }else{

            if(st.size()==0)
                return false;
            if(s[i]==']'){
                char temp=st.top();
                if(temp!='[')
                    return false;
                st.pop();
            }
            else if(s[i]=='}'){
                char temp=st.top();
                if(temp!='{')
                    return false;
                st.pop();
            }else if(s[i]==')'){
                char temp=st.top();
                if(temp!='(')
                    return false;
                st.pop();
            }


        }




    }

    if(st.size()!=0)
        return false;

    return true;
}